<?php

class HttpGenerarReporte extends TPage {
//<editor-fold defaultstate="collapsed" desc="GenerarExcel">
  /**
   * genera una archivo excel a partir de un array
   * @param <type> $arr
   * @param <type> $nombreArchivo
   * @param <type> $arrHojas
   * @return <type>
   * @author VSR, 15/04/2012
   */
  private function generarExcel($arr,$nombreArchivo,$arrHojas){
    $retorno = "";
    try {
      $xls = new PHPExcel("UTF-8", false);
      $totalArray = count($arr);
      $totalHojas = count($arrHojas);

      for($i=0; $i<= $totalArray-1;$i++){
        if($i <= $totalHojas -1){
          $nombreHoja = $arrHojas[$i];
        } else {
          $nombreHoja = "";
        }
        $arrDatosHoja = $arr[$i];
        if(count($arrDatosHoja) > 0){
          //formatea el array para mostrarlo en el excel
          $arrDatosHoja = Utilidades::obtenerArrayHojaExcel($arrDatosHoja);
          $xls->addArray($nombreHoja,$arrDatosHoja);
        }
      }
      $xls->generateXML($nombreArchivo);
      $retorno = Sistema::CODIGO_SQL_EXITO;
      return $retorno;
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="REP_FlujosPorAprobar">
  /**
   * genera reporte para los flujos pendientes
   * @return <type>
   * @author VSR, 15/04/2012
   */
  private function reporteFlujosPorAprobar($oUsuario) {
    $arr = "";
    $listadoDatosJSON = urldecode($this->Request["listadoDatos"]);

    try {
      $arr = json_decode($listadoDatosJSON);
      $fechaDesde = $arr->fechaDesde;
      $fechaHasta = $arr->fechaHasta;
      $idEmpresa = $arr->idEmpresa;
      $idUsuario = $oUsuario->getId();
      $totalArray = 0;
      $totalRegistros = 0;

      //formatea valores
      $fechaDesde = (Utilidades::isNullOrEmpty($fechaDesde)) ? "-1" : $fechaDesde;
      $fechaHasta = (Utilidades::isNullOrEmpty($fechaHasta)) ? "-1" : $fechaHasta;
      $idEmpresa = (Utilidades::isNullOrEmpty($idEmpresa)) ? "-1" : $idEmpresa;

      $arr = WfReporte::consultaGenerica("spu_WfReporte_FlujosPorAprobar",$fechaDesde, $fechaHasta, $idEmpresa, $idUsuario);
      if(!is_null($arr)){
        $totalArray = count($arr);
        for($i = 0; $i <= $totalArray-1; $i++){
          $totalRegistros += count($arr[$i]);
        }
      }

      if($totalRegistros > 0){
        $nombreArchivo = Utilidades::obtenerNombreUnicoArchivo("FlujosPorAprobar");
        $arrHojas = array("Flujos por aprobar", "Top 10 Usuarios");
        $retorno = $this->generarExcel($arr,$nombreArchivo,$arrHojas);
      } else {
        $retorno = Sistema::CODIGO_SQL_SIN_DATOS;
        Utilidades::grabarSessionPorNombre(WfReporte::NOMBRE_ENTIDAD."EsMensajeError", "0");
        Utilidades::grabarSessionPorNombre(WfReporte::NOMBRE_ENTIDAD."TextoMensaje", "No se encontraron registros");
      }
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
      Utilidades::grabarSessionPorNombre(WfReporte::NOMBRE_ENTIDAD."EsMensajeError", "1");
      Utilidades::grabarSessionPorNombre(WfReporte::NOMBRE_ENTIDAD."TextoMensaje", $e->getMessage());
    }
    return $retorno;
  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="REP_FlujosPorEstado">
  /**
   * genera reporte de flujos por estado
   * @return <type>
   * @author VSR, 15/04/2012
   */
  private function reporteFlujosPorEstado($oUsuario) {
    $arr = "";
    $listadoDatosJSON = urldecode($this->Request["listadoDatos"]);

    try {
      $arr = json_decode($listadoDatosJSON);
      $fechaDesde = $arr->fechaDesde;
      $fechaHasta = $arr->fechaHasta;
      $idEmpresa = $arr->idEmpresa;
      $idFlujoEstado = $arr->idFlujoEstado;
      $idUsuario = $oUsuario->getId();
      $totalArray = 0;
      $totalRegistros = 0;

      //formatea valores
      $fechaDesde = (Utilidades::isNullOrEmpty($fechaDesde)) ? "-1" : $fechaDesde;
      $fechaHasta = (Utilidades::isNullOrEmpty($fechaHasta)) ? "-1" : $fechaHasta;
      $idEmpresa = (Utilidades::isNullOrEmpty($idEmpresa)) ? "-1" : $idEmpresa;
      $idFlujoEstado = (Utilidades::isNullOrEmpty($idFlujoEstado)) ? "-1" : $idFlujoEstado;

      $arr = WfReporte::flujosPorEstado($fechaDesde, $fechaHasta, $idFlujoEstado, $idEmpresa, $idUsuario);
      if(!is_null($arr)){
        $totalArray = count($arr);
        for($i = 0; $i <= $totalArray-1; $i++){
          $totalRegistros += count($arr[$i]);
        }
      }

      if($totalRegistros > 0){
        $nombreArchivo = Utilidades::obtenerNombreUnicoArchivo("FlujosPorEstado");
        $arrHojas = array("Flujos por estado");
        $retorno = $this->generarExcel($arr,$nombreArchivo,$arrHojas);
      } else {
        $retorno = Sistema::CODIGO_SQL_SIN_DATOS;
        Utilidades::grabarSessionPorNombre(WfReporte::NOMBRE_ENTIDAD."EsMensajeError", "0");
        Utilidades::grabarSessionPorNombre(WfReporte::NOMBRE_ENTIDAD."TextoMensaje", "No se encontraron registros");
      }
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
      Utilidades::grabarSessionPorNombre(WfReporte::NOMBRE_ENTIDAD."EsMensajeError", "1");
      Utilidades::grabarSessionPorNombre(WfReporte::NOMBRE_ENTIDAD."TextoMensaje", $e->getMessage());
    }
    return $retorno;
  }

//</editor-fold>


  public function onLoad($param) {
    parent::onLoad($param);
    $opcion = urldecode($this->Request["op"]);
    $pagina = urldecode($this->Request["pagina"]);
    $response = $this->getResponse();

    try {
      $session = new THttpSession();
      $session->open();
      $oUsuario = Utilidades::obtenerSessionPorNombre(Usuario::NOMBRE_ENTIDAD);
      Utilidades::grabarSessionPorNombre(WfReporte::REPORTE_GENERADO, "0");

      switch ($opcion) {
        case "REP_FlujosPorAprobar":
          $respuesta = $this->reporteFlujosPorAprobar($oUsuario);
          break;
        case "REP_FlujosPorEstado":
          $respuesta = $this->reporteFlujosPorEstado($oUsuario);
          break;
        default:
          $respuesta = Sistema::CODIGO_SQL_ERROR;
          break;
      }
    } catch (Exception $e) {
      $respuesta = Sistema::CODIGO_SQL_ERROR;
      Utilidades::grabarSessionPorNombre(WfReporte::NOMBRE_ENTIDAD."EsMensajeError", "1");
      Utilidades::grabarSessionPorNombre(WfReporte::NOMBRE_ENTIDAD."TextoMensaje", $e->getMessage());
    }

    if($respuesta == Sistema::CODIGO_SQL_EXITO) {
      Utilidades::grabarSessionPorNombre(WfReporte::REPORTE_GENERADO, "1");
      exit;
    } else {
      Utilidades::grabarSessionPorNombre(WfReporte::REPORTE_GENERADO, "0");
      $this->Page->ClientScript->registerEndScript("scriptGenerarReporte", "top.location.href=\"index.php?page=".$pagina."\";");
    }
  }

}
?>
